import random
import redis
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.redis import RedisJobStore
from apscheduler.triggers.cron import CronTrigger

from server.settings import settings
from uiselfexe.ui_case_run import runAndSendMsgToDingTalk


# Redis 配置
REDIS_CONFIG = {
    'host': settings.REDIS_HOST,
    'port': settings.REDIS_PORT,
    'db': settings.REDIS_DB,
    'password': settings.REDIS_PASSWORD,
    'jobs_key': 'apscheduler.jobs',
    'run_times_key': 'apscheduler.run_times'
}

# 创建调度器（单例模式）
scheduler = BackgroundScheduler(
    jobstores={'default': RedisJobStore(**REDIS_CONFIG)},
    timezone="Asia/Shanghai"  # 设置时区
)

# 创建 Redis 连接用于清理
redis_conn = redis.Redis(
    host=settings.REDIS_HOST,
    port=settings.REDIS_PORT,
    db=settings.REDIS_DB,
    password=settings.REDIS_PASSWORD
)

def init_scheduler():
    """启动时自动添加任务"""
    if not scheduler.running:
        scheduler.start()
        # 添加 Cron 任务（每分钟执行一次）
        scheduler.add_job(
            func=runAndSendMsgToDingTalk,
            trigger=CronTrigger.from_crontab(settings.SCHEDULES),  # Cron 表达式
            id=f'id{random.randint(100000, 999999)}'
        )

def cleanup_redis():
    """清理 Redis 中的任务数据"""
    redis_conn.delete(REDIS_CONFIG['jobs_key'])
    redis_conn.delete(REDIS_CONFIG['run_times_key'])
    print("已清理 Redis 中的任务数据")